//
//  DLPopMenuSelectView.h
//  DLPopMenuSelectView
//
//  Created by 伍明鹏 on 2019/12/13.
//  Copyright © 2019 MS. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "DLPopMenuModel.h"

//下拉框是否带箭头
typedef enum : NSUInteger {
    DLPopMenuSelectViewTypeCustom,//没有箭头的下拉框
    DLPopMenuSelectViewTypeArrow,//带箭头的下拉框
} DLPopMenuSelectViewType;

//优先考虑弹出的方向
typedef enum : NSUInteger {
    DLPopMenuSelectViewBottom,//下
    DLPopMenuSelectViewTop,//上
    DLPopMenuSelectViewLeft,//左
    DLPopMenuSelectViewRight//右
} DLPopMenuSelectViewDirection;

//删除某一项回调
typedef void(^RemoveOptionBlock)(NSIndexPath*indexPath);
//单选某一项回调
typedef void(^SelectOptionBlock)(DLPopMenuModel *selectOption);



@interface DLPopMenuSelectView : UITableView

///背景层颜色
@property (nonatomic, strong) UIColor *coverColor;
//自定义Cell
@property (nonatomic, copy) UITableViewCell*(^cell)(NSIndexPath *);
//cell高度
@property (nonatomic, copy) float(^optionCellHeight)();
//单击回调
@property (nonatomic, copy) SelectOptionBlock selectedOption;
//显示时，距离四周的间距，具体对齐方式，可以自行根据需求设置
@property (nonatomic, assign) UIEdgeInsets edgeInsets;
//下拉框有无箭头风格
@property (nonatomic, assign) DLPopMenuSelectViewType optionType;
///缩放 NO 竖直或水平展开 YES,弹出动画风格
@property (nonatomic, assign) BOOL vhShow;

/**
 *  init
 *  @param displayArray 展示数据
 *
 *  @param maxLine 可见最大行数
 */
- (instancetype)initOptionViewWithDisplayOptions:(NSArray <DLPopMenuModel*>*)displayArray maxLine:(CGFloat)maxLine;

/**
 *  计算一个view相对于其父视图在window上的frame，可以通过这个rect和弹出方向，来设置弹出的point
 *
 *  @param targetView 围绕展示的view
 *
 *  @return 相对其父视图在window上的frame
 */

+ (CGRect)targetView:(UIView *)targetView;

/**
 *  弹出视图，配合edgeInsets使用,如果不设置edgeInsets，弹出效果会根据width进行适配弹出，建议使用edgeInsets
 *  @param offset_Scale     弹出点在对用方向view上的百分比
 *  @param width            能够显示的最大宽度
 *  @param targetView       弹出视图围绕显示的view
 *  @param directionType    弹出方向，在上下或者左右都能显示时，优先选择
 */
- (void)showOffSetScale:(CGFloat)offset_Scale
              viewWidth:(CGFloat)width
             targetView:(UIView *)targetView
              direction:(DLPopMenuSelectViewDirection)directionType;

/**
 *  弹出视图
 *  @param tapPoint      点击的点
 *  @param width         能够显示的最大宽度
 *  @param directionType 弹出方向，在上下或者左右都能显示时，优先选择
 */
- (void)showTapPoint:(CGPoint)tapPoint
           viewWidth:(CGFloat)width
           direction:(DLPopMenuSelectViewDirection)directionType;

/**
 *  弹出视图
 *  @param viewCenter      弹出视图的中心点
 *  @param width           能够显示的最大宽度
 */
- (void)showViewCenter:(CGPoint)viewCenter
             viewWidth:(CGFloat)width;

@end
